package tests;


import static org.junit.Assert.assertTrue;

import java.util.Date;

import org.junit.Before;
import org.junit.Test;

import vuelo.VueloDirecto;
import asiento.Asiento;
import asiento.Disponible;
import asiento.Reservado;
import busqueda.Busqueda;
import filtro.FiltroPorDisponibilidad;

public class FiltroPorDisponibilidadAsientoTest {

	FiltroPorDisponibilidad filtro;
	VueloDirecto vuelo;
	Busqueda busqueda, busqueda1;
	Asiento asiento;
	Asiento otroAsiento;
	Asiento diferenteAsiento;
	
	@Before
	public void setUp() throws Exception {
		asiento = new Asiento();
		asiento.setOrigen("Arg");
		asiento.setDestino("Bra");
		asiento.setEstado(new Reservado());
		asiento.setFechaLlegada(new Date());
		asiento.setFechaSalida(new Date());
		
		otroAsiento = new Asiento();
		otroAsiento.setOrigen("Arg");
		otroAsiento.setDestino("Bra");
		otroAsiento.setEstado(new Reservado());
		
		diferenteAsiento = new Asiento();
		diferenteAsiento.setOrigen("Arg");
		diferenteAsiento.setDestino("Bra");
		diferenteAsiento.setEstado(new Disponible());
		
		vuelo = new VueloDirecto("ECO344", asiento);
		vuelo.addAsiento(asiento);
		
		busqueda = new Busqueda("Arg", "Bra", "date");
		busqueda.setEstadoDeReserva(new Disponible());
		
		busqueda1 = new Busqueda("Arg", "Bra", "date");
		
		filtro = new FiltroPorDisponibilidad();
	}

	@Test
	public void vueloConUnAsientoReservado(){
		filtro.filtrarVueloDirecto(vuelo, busqueda);
		assertTrue(vuelo.getAsientos().size() == 0);
	}
	
	@Test 
	public void vueloConDosAsientosReservados(){ 
		vuelo.addAsiento(otroAsiento);
		filtro.filtrarVueloDirecto(vuelo, busqueda);
		assertTrue(vuelo.getAsientos().size() == 0);
	}
	
	@Test 
	public void vueloConDosAsientosDiferenteDisponibilidad(){ 
		vuelo.addAsiento(diferenteAsiento);
		filtro.filtrarVueloDirecto(vuelo, busqueda);
		assertTrue(vuelo.getAsientos().size() == 1);
	}
	
	@Test 
	public void vueloConUnAsientoDisponible(){ 
		vuelo.getAsientos().clear();
		vuelo.addAsiento(diferenteAsiento);
		filtro.filtrarVueloDirecto(vuelo, busqueda);
		assertTrue(vuelo.getAsientos().size() == 1);
	}
	
	@Test
	public void vueloConUnAsientoBusquedaNull(){
		filtro.filtrarVueloDirecto(vuelo, busqueda1);
		assertTrue(vuelo.getAsientos().size() == 1);
	}
	
	@Test
	public void vueloConDosAsientoBusquedaNull(){
		vuelo.addAsiento(otroAsiento);
		filtro.filtrarVueloDirecto(vuelo, busqueda1);
		assertTrue(vuelo.getAsientos().size() == 2);
	}
	
	@Test
	public void vueloConTresAsientoBusquedaNull(){
		vuelo.addAsiento(otroAsiento);
		vuelo.addAsiento(diferenteAsiento);
		filtro.filtrarVueloDirecto(vuelo, busqueda1);
		assertTrue(vuelo.getAsientos().size() == 3);
	}
}
